Some storage systems, such as Flash memory, permit one of multiple possible levels (e.g., voltage levels) to be stored in a unit of storage (e.g., a cell in a Flash memory system). This permits multiple bits to be stored per unit of storage. For example, if four possible (voltage) levels can be stored, then each unit has a 2-bit storage capacity. In general, if there are M levels per unit of storage this corresponds to log2(M) bits/unit of storage. For a variety of reasons, the level read back from storage media may not be the same level as what was originally written. In a Flash memory system, some examples include temperature variation (e.g., depending upon the ambient temperature, the level read back will vary), data retention issues (e.g., over time, leakage from a cell transistor's floating gate causes the stored and read back voltage to decrease), and transmission line effects (e.g., observed as a ramp in the read back voltage that gradually increases from one end of a transistor string (i.e., wordline) to the other end). Regardless of the underlying cause, storage systems attempt to compensate or otherwise adjust for this using channel estimation.
One channel estimation technique involves the usage of reference cells. Reference cells are cells used to stored overhead information (i.e., not user data) and in particular for channel estimation, the reference cells are used to store known values. The values are later read back and then the channel is estimated using the known, stored values and the level that was actually read back. There are two disadvantages associated with performing channel estimation in this manner. First, a maximum number of cells are typically allocated to be reference cells and these reference cells are also used to store code information so that the read back data can be decoded (e.g., using an error correction or error detection code). Channel estimation relies on a sufficiently large number of samples and thus the strength of a code suffers since there are a limited number of reference cells. Another disadvantage is that a reference cell can become damaged or defective (e.g., sometimes referred to as a slow or stuck cell). If this occurs and a statistically insufficient number of stored values are used for channel estimation (e.g., because of the requirements of the code and/or the limited number of reference cells), then channel estimation will suffer. It would be desirable to develop new channel estimation techniques which overcome some or all of these issues.